Verilog 除法器设计 |
您所在的位置:网站首页 › verilog 除法运算 › Verilog 除法器设计 |
除法器原理(定点)
和十进制除法类似,计算 27 除以 5 的过程如下所示: 除法运算过程如下: 取被除数的高几位数据,位宽和除数相同(实例中是 3bit 数据)。 将被除数高位数据与除数作比较,如果前者不小于后者,则可得到对应位的商为 1,两者做差得到第一步的余数;否则得到对应的商为 0,将前者直接作为余数。 将上一步中的余数与被除数剩余最高位 1bit 数据拼接成新的数据,然后再和除数做比较。可以得到新的商和余数。 重复过程3,直到被除数最低位数据也参与计算。需要说明的是,商的位宽应该与被除数保持一致,因为除数有可能为1。所以上述手动计算除法的实例中,第一步做比较时,应该取数字 27 最高位 1 (3'b001) 与 3'b101 做比较。 根据此计算过程,设计位宽可配置的流水线式除法器,流水延迟周期个数与被除数位宽一致。 除法器设计 单步运算设计单步除法计算时,单步被除数位宽(信号 dividend)需比原始除数(信号 divisor)位宽多 1bit 才不至于溢出。 为了便于流水,输出端需要有寄存器来存储原始的除数(信号 divisor 和 divisor_kp)和被除数信息(信号 dividend_ci 和 dividend_kp)。 单步的运算结果就是得到新的 1bit 商数据(信号 merchant)和余数(信号 remainder)。 为了得到最后的除法结果,新的 1bit 商数据(信号 merchant)还需要与上一周期的商结果(merchant_ci)进行移位累加。 单步运算单元设计如下(文件名 divider_cell.v): // parameter M means the actual width of divisor module divider_cell #(parameter N=5, parameter M=3) ( input clk, input rstn, input en, input [M:0] dividend, input [M-1:0] divisor, input [N-M:0] merchant_ci , //上一级输出的商 input [N-M-1:0] dividend_ci , //原始除数 output reg [N-M-1:0] dividend_kp, //原始被除数信息 output reg [M-1:0] divisor_kp, //原始除数信息 output reg rdy , output reg [N-M:0] merchant , //运算单元输出商 output reg [M-1:0] remainder //运算单元输出余数 ); always @(posedge clk or negedge rstn) begin if (!rstn) begin rdy |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |